package collection;

import java.util.*;

public class HeroSet {
    public static void main(String[] args) {
//        创建ArrayList集合
//        Collection<String> heroes = new ArrayList<>();
        Collection<String> heroes = new HashSet<>();
//        1、add()方法添加元素到集合中
        boolean b = heroes.add("孙悟空");
        System.out.println(b);
        heroes.add("猪八戒");
        heroes.add("唐僧");
        heroes.add("刘禅");
        heroes.add("兰陵王");
        System.out.println("英雄列表：" + heroes);

        Collection<String> newHeroes = new ArrayList<>();
        newHeroes.add("孙尚香");
        newHeroes.add("后裔");

//        2、添加多个元素到集合中
        heroes.addAll(newHeroes);
        System.out.println("英雄列表：" + heroes);

//        3、清空集合中的英雄列表
//        heroes.clear();
        System.out.println("英雄列表：" + heroes);
//        4、判断集合中英雄是否为空:空集合返回true，否则返回false
        boolean empty = heroes.isEmpty();
        System.out.println("集合是否为空：" + empty);
        System.out.println("=======================================================");
        System.out.println(newHeroes);
        System.out.println(newHeroes.isEmpty());
//        5、获取集合的长度
        int size = newHeroes.size();
        System.out.println("集合的长度：" + size);
        System.out.println(heroes.size());
//        6、判断集合中是否包含元素/英雄 ： 包含返回true，否则返回false
        boolean contains = heroes.contains("后裔");
        System.out.println("集合中是否包含后裔：" + contains);
        System.out.println("集合中是否包含后裔：" + newHeroes.contains("后裔"));
        System.out.println("=======================================================");
        System.out.println(newHeroes);
        System.out.println("heroes所有" + heroes);

//        7、保留当前集合与另一个集合中相同的元素
//        boolean retainAll = heroes.retainAll(newHeroes);
        System.out.println("集合中保留后裔后：" + heroes);
//        8、移除一个元素/英雄 : 移除成功返回true，否则返回false
        boolean remove = heroes.remove("后裔");
        System.out.println("================");
        heroes.add("后裔");
        System.out.println("heroes所有" + heroes);
        System.out.println("newHeroes" + newHeroes);
//        9、移除多个元素/英雄，需要传入一个集合
        heroes.removeAll(newHeroes);
        System.out.println("heroes所有" + heroes);
//        10.使用迭代器遍历集合
        // 10.1、获取迭代器
        Iterator<String> iterator = heroes.iterator();
//        迭代器作用：遍历集合
//        10.2、判断是否有下一个元素
        while (iterator.hasNext()) {  // 判断是否有下一个元素
//            10.3、获取下一个元素，并输出
            String next = iterator.next(); // 获取下一个元素
            System.out.println(next);
        }
//        System.out.println("=======================================================");
//        4.2 格式：
//for(要遍历的集合或数组元素的类型 临时变量 : 要遍历的集合或数组变量){
//    操作临时变量的输出
//}
//        for (String hero : heroes){
//            System.out.println(hero);
//        }
//        System.out.println("=======================================================");
//        for (int i = 0; i < heroes.size(); i++) {
//            String hero = (String) heroes.toArray()[i];
//            System.out.println(hero);
//        }

//        11、集合 ---> 数组：toArray()
        Object[] objects = heroes.toArray();
//        什么是哈希值？ 哈希值可以想象成一种特殊的“指纹”。就像人的指纹一样，每个人都有独一无二的指纹


        //11.1数组 ---> 集合：调用Arrays的静态方法asList(Object ... objs)
        List<Object> list = Arrays.asList(objects);

        System.out.println();
//       12、hashCode()方法：返回集合的哈希值
//        什么是哈希值？ 哈希值可以想象成一种特殊的“指纹”。每个人都有独一无二的指纹。
//        把任意长度的输入通过hash算法变换成固定长度的输出，该输出就是hash值。任何对象都有hash值。
//
        System.out.println(heroes.hashCode()); //848123282
        // 13、equals()方法：是两个集合的元素依次进行比较值是否相等
        System.out.println(heroes.equals(newHeroes));
//        14.containsAll(Collection coll) 判断当前集合是否包含另一个集合中的所有元素，包含返回true，否则返回false
        System.out.println(heroes.containsAll(newHeroes));

//        15、与7相同，retainAll(Collection coll) 保留当前集合与另一个集合中相同的元素
        heroes.retainAll(newHeroes);
    }

//
}

